home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / eulisp / feel-075.lha / feel0.75 / Src / state.h < prev    next >
C/C++ Source or Header  |  1992-06-18  |  2KB  |  50 lines

  1. /* ******************************************************************** */
  2. /* state.h           Copyright (C) Codemist and University of Bath 1989 */
  3. /*                                                                      */
  4. /* Lisp state                                                   */
  5. /* ******************************************************************** */
  6.  
  7. /* Fixed outside of a context switch... */
  8.  
  9. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(int*,state_stack_base);
  10. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(LispObject*,state_gc_stack_base);
  11. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(LispObject,state_current_thread);
  12.  
  13. #define STACK_BASE() (SYSTEM_THREAD_SPECIFIC_VALUE(state_stack_base))
  14. #define GC_STACK_BASE() (SYSTEM_THREAD_SPECIFIC_VALUE(state_gc_stack_base))
  15. #define CURRENT_THREAD() (SYSTEM_THREAD_SPECIFIC_VALUE(state_current_thread))
  16.  
  17. /* Forever wandering... */
  18.  
  19. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(LispObject*,state_gc_stack_pointer);
  20. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(Env,state_dynamic_env);
  21. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(LispObject,state_last_continue);
  22. extern SYSTEM_THREAD_SPECIFIC_DECLARATION(LispObject,state_handler_stack);
  23.  
  24. #define GC_STACK_POINTER() (SYSTEM_THREAD_SPECIFIC_VALUE(state_gc_stack_pointer))
  25. #define DYNAMIC_ENV()      (SYSTEM_THREAD_SPECIFIC_VALUE(state_dynamic_env))
  26. #define LAST_CONTINUE()    (SYSTEM_THREAD_SPECIFIC_VALUE(state_last_continue))
  27. #define HANDLER_STACK()    (SYSTEM_THREAD_SPECIFIC_VALUE(state_handler_stack))
  28.  
  29. extern int set_continue_1(LispObject *,LispObject);
  30. extern int set_continue_2(LispObject);
  31. extern void call_continue(LispObject *,LispObject,LispObject);
  32. LispObject save_state(LispObject *,LispObject);
  33. extern LispObject *load_thread(LispObject);
  34.  
  35. #define set_continue(stacktop,cont) \
  36.   (set_continue_1(stacktop,cont), \
  37.    (setjmp((cont)->CONTINUE.machine_state) \
  38.     ? TRUE \
  39.     : set_continue_2(cont)))
  40.  
  41. #define unset_continue(cont) \
  42.   (cont->CONTINUE.live = FALSE, \
  43.    SYSTEM_THREAD_SPECIFIC_VALUE(state_last_continue) \
  44.      = cont->CONTINUE.last_continue, \
  45.    cont->CONTINUE.last_continue = nil);
  46.  
  47.  
  48.                  
  49.  
  50.